package com.zk.lettcode;

/**
 * 两数相加
 * 最初的想法：将链表转为字符串--》反转--》转化位数字--》相加--》转为字符串--》反转--》转为链表
 * 目前实现方式：将两个链表视为相等的长度，取相同位置的值进行相加，如果长度不够取0，进位时打上标记，下一位要记得加上
 * @Author: zhang kai
 * @Date: 2021/11/08
 * @Description: https://leetcode-cn.com/problems/add-two-numbers/
 */
public class Practice1 {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        //进位
        int carry = 0;
        //头节点
        ListNode head = null;
        //当前节点
        ListNode current = null;
        while (l1 != null || l2 != null) {
            //如果超过节点赋值0
            int val1 = l1 != null ? l1.val : 0;
            int val2 = l2 != null ? l2.val : 0;

            int val3 = val1 + val2 + carry;
            //下一个元素进位的值
            carry = val3 / 10;
            //当前元素的值
            int val4 = val3 % 10;

            if (head == null) {
                head = current = new ListNode(val4);
            } else {
                current.next = new ListNode(val4);
                current = current.next;
            }
            l1 = l1 != null ? l1.next : null;
            l2 = l2 != null ? l2.next : null;
        }
        if (carry > 0) {
            current.next = new ListNode(carry);
        }
        return head;
    }

}
